package ar.edu.isft189.pdfBox;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
 * Clase que procesa los datos de los properties que son utilizados en todas las demas clases
 * 
 * @author dGomez
 * @version 1.0
 */
public class Config{
    //Directorio donde estan los formularios
    private static String dirForms = null;
    //Directorio donde se van a guardar los pdf generados
    private static String saveDirForms = null;
    //hashMap con los directorios de las app
    private static Map<String, String> mapaDir = new HashMap<String,String>();
    //hashMap con los nombres de los formularios
    private static Map<String, String> mapaName = new HashMap<String,String>();
    //Archivos que contendran la informacion de los properties
    private static File dirconf;
    private static File nameconf;

    public static void execute(){
        String filesep = System.getProperty("file.separator");
        //Cargo los directorios
        dirconf = new File("syscfg" + filesep +"dirConfig.properties");
        //Cargo los nombres de los formularios
        nameconf = new File("syscfg" + filesep +"nameConfig.properties");
        Properties p = new Properties();
        //Levanto el archivo de configuracion
        try {
        	 //Proceso los datos del los directorios
            p.load(new FileInputStream(dirconf));
            dirForms =  p.getProperty("Directorio");
            saveDirForms = p.getProperty("Destino");
            processProperty(p); 
            //Proceso de fechas para el formulario
            Utils.processFechaActual();
            
            //Proceso los datos del los nombres de los forms
            p = new Properties();
            p.load(new FileInputStream(nameconf));
            processProperty(p); 
        } catch(IOException ioe) {
            System.err.println("Utils.execute: Error cargando " + dirconf + " =>"+ ioe.getMessage());
        }
    }
    
    /**
     * Metodo que procesa los archivos de properties para guardar los datos en hashMap 
     * para que los utilicen las demas clases
     * 
     * si el properties contiene la clave "Directorio" la elimino
     */

	private static void processProperty(Properties p){
        Map<String, String> mapa = new HashMap<String,String>();
        
        for (Enumeration e = p.keys(); e.hasMoreElements() ; ) {
            // Obtenemos el objeto
            String key = String.valueOf(e.nextElement());
            //System.out.println(obj + ": " + p.getProperty(obj.toString()));
            mapa.put(key,p.getProperty(key));            
        }
        
        if (mapa.containsKey("Directorio")){
            mapa.remove("Directorio");
            
            if (mapa.containsKey("Destino"))
                mapa.remove("Destino");           
            
            mapaDir.putAll(mapa); 
        }else if (mapa.containsKey("Destino")){
            mapa.remove("Destino");             
            mapaName.putAll(mapa);
        }else{        	
        	 mapaName.putAll(mapa);
        }
    }
    
   
    /**
     * Set de la variable dirForms
     */
    public static void setDirForms(String n){
        dirForms = n;   
    }
    
    /**
     * Metodos Get qeu devuelve el HashMap con la lista de los directorios 
     * para cada formulario
     */
    public static String getDirForms(){
        return dirForms;   
    }   
    
    public static Map<String,String> getMapaDir(){
        return mapaDir;
    }
    
    public static Map<String,String> getMapaName(){
        return mapaName;
    }

	/**
	 * @return the saveDirForms
	 */
	public static String getSaveDirForms() {
		return saveDirForms;
	}

	/**
	 * @param saveDirForms the saveDirForms to set
	 */
	public static void setSaveDirForms(String saveDirForms) {
		Config.saveDirForms = saveDirForms;
	}
}